這篇會介紹關於 PYTHON 的檔案處理
在 Python 中,打開檔案的第一步是使用 open()
函數。
# 以讀取模式打開文本檔案
file = open('example.txt', 'r')
'r'
: 讀取模式。檔案必須存在。'w'
: 寫入模式。若檔案存在,將覆蓋原有內容;若檔案不存在,將創建新檔案。'a'
: 追加模式。在檔案末尾添加內容。若檔案不存在,將創建新檔案。'b'
: 二進制模式。用於讀寫二進制數據(例如圖片、音頻)。可以與其他模式結合使用,如 'rb'
或 'wb'
。't'
: 文本模式。這是讀取和寫入文本檔案的默認模式。打開檔案後,務必使用 close()
方法來關閉檔案,釋放系統資源,避免檔案鎖定或記憶體洩漏。
# 關閉檔案
file.close()
'r'
:
FileNotFoundError
。
with open('example.txt', 'r') as file:
content = file.read()
print(content)
'w'
:
with open('example.txt', 'w') as file:
file.write("這是新的內容,將覆蓋舊內容。\n")
'a'
:
with open('example.txt', 'a') as file:
file.write("這是追加的內容,不會覆蓋舊內容。\n")
'b'
:
'rb'
讀取二進制檔案,或 'wb'
寫入二進制檔案。
# 以二進制讀取模式打開圖片
with open('image.png', 'rb') as file:
data = file.read()
# 以二進制寫入模式保存圖片
with open('copy_image.png', 'wb') as file:
file.write(data)
with
陳述式為了確保檔案在使用後能正確關閉,建議使用 with
陳述式。這樣可以自動處理檔案的開啟與關閉,避免忘記關閉檔案所引起的問題。with
陳述式的範例如下:
with open('example.txt', 'r') as file:
content = file.read()
# 在這個區塊中進行檔案操作,無需手動關閉檔案
# 檔案在離開區塊後自動關閉
Python 提供了多種方法來讀取檔案內容,根據需求可以選擇適當的方法:
read(size=-1)
:讀取整個檔案或指定大小的資料。readline(size=-1)
:逐行讀取檔案內容,或讀取指定大小的資料直到遇到行結束符。readlines(hint=-1)
:將檔案內容讀取為列表,每行作為列表中的一個元素。read()
方法read()
方法用於一次性讀取檔案的全部內容,適合用於處理小型文本檔案。
# 讀取整個檔案的內容
with open('example.txt', 'r') as file:
content = file.read()
print(content)
您也可以指定 read()
的參數來控制讀取的字節數:
# 讀取檔案的前 100 個字元
with open('example.txt', 'r') as file:
content = file.read(100)
print(content)
readline()
方法readline()
用於逐行讀取檔案內容,適合用於逐步解析大文件或逐行處理檔案數據。
# 逐行讀取檔案的內容
with open('example.txt', 'r') as file:
line = file.readline()
while line:
print(line, end='') # `end=''` 是為了避免重複換行
line = file.readline()
readlines()
方法readlines()
方法將檔案的每一行讀取為列表中的一個元素,適合用於一次讀取多行內容並以列表形式處理。
# 將檔案內容讀取為列表
with open('example.txt', 'r') as file:
lines = file.readlines()
print(lines)
使用 readlines()
方便將文件內容作為列表進行遍歷或批量處理。例如,去除行末的換行符號:
with open('example.txt', 'r') as file:
lines = [line.strip() for line in file.readlines()]
print(lines)
write()
方法write()
方法將字串寫入到檔案中,若檔案已存在,會根據打開模式覆蓋或追加內容。
# 以寫入模式打開檔案,並寫入數據
with open('example.txt', 'w') as file:
file.write("這是寫入的內容。\n")
file.write("這是另一行寫入的內容。\n")
writelines()
方法writelines()
方法用於將列表中的每個元素作為一行寫入檔案。這個方法不會自動添加換行符,必須手動在每個元素後添加 \n
。
# 將列表中的內容逐行寫入檔案
lines = ["第一行\n", "第二行\n", "第三行\n"]
with open('example.txt', 'w') as file:
file.writelines(lines)
``
`
如果列表中的元素不包含換行符,可以使用 `join()` 函數來手動添加:
```python
lines = ["第一行", "第二行", "第三行"]
with open('example.txt', 'w') as file:
file.write('\n'.join(lines))
os.getcwd()
: 返回當前工作的目錄路徑(當前執行的目錄)。
import os
current_directory = os.getcwd()
print("當前工作目錄:", current_directory)
os.path.abspath(path)
: 將給定的路徑轉換為絕對路徑。
file_path = "example.txt"
absolute_path = os.path.abspath(file_path)
print("絕對路徑:", absolute_path)
os.path.join()
: 將多個路徑組件組合成一個路徑。這種方法會自動處理不同作業系統的路徑分隔符號(如 Windows 的 \
和 Unix 的 /
)。
full_path = os.path.join("folder", "subfolder", "file.txt")
print("合併路徑:", full_path)
os.path.basename()
: 返回路徑中的文件名部分。
path = "/home/user/documents/file.txt"
filename = os.path.basename(path)
print("文件名:", filename)
os.path.dirname()
: 返回路徑中的目錄部分。
directory = os.path.dirname(path)
print("目錄:", directory)
os.path.splitext()
: 將文件名和擴展名分離,返回一個包含兩個元素的元組。
filename = "example.txt"
name, extension = os.path.splitext(filename)
print("文件名:", name)
print("擴展名:", extension)
os.path.exists()
: 檢查路徑或文件是否存在,返回 True
或 False
。
path = "example.txt"
if os.path.exists(path):
print("檔案存在")
else:
print("檔案不存在")
os.path.isfile()
: 檢查路徑是否指向一個文件。
if os.path.isfile(path):
print("這是個文件")
os.path.isdir()
: 檢查路徑是否指向一個目錄。
if os.path.isdir(path):
print("這是一個目錄")
os.mkdir()
: 創建一個目錄。
os.mkdir("new_folder")
os.makedirs()
: 創建多層目錄。
os.makedirs("new_folder/subfolder")
os.remove()
: 刪除一個文件。
os.remove("file.txt")
os.rmdir()
: 刪除一個目錄。注意,該目錄必須是空的。
os.rmdir("empty_folder")
os.removedirs()
: 刪除多層目錄。
os.removedirs("folder/subfolder")
參考資料 :
https://utrustcorp.com/python-file-read-wirte/
https://medium.com/ccclub/ccclub-python-for-beginners-tutorial-bf0648108581